import { SupabaseService } from './supabase.service';
import { createClient } from '@supabase/supabase-js';
import { config } from '../config';

const supabase = createClient(config.supabaseUrl, config.supabaseKey);

export interface Tool {
  tool_id: string;     // 数据库自动生成
  tool_name: string;
  content: string;
  created_at: string;
}

export class ToolService extends SupabaseService<Tool> {
  protected tableName = 'tools';  // 指定对应的数据库表名

  // 继承基类后自动获得以下方法：
  // findAll() - 对应原getTools
  // create() - 对应原addTool
  // update() - 对应原updateTool
  // delete() - 对应原deleteTool

  // 新增获取单个工具方法
  async fetchCode(toolId: string): Promise<Tool> {
    return this.findById('tool_id',toolId);  // 复用基类方法
  }

  // 新增保存方法（合并创建和更新）
  async saveTool(payload: {
    tool_id?: string;
    tool_name: string;
    content: string;
  }): Promise<Tool> {
    const { tool_id, ...rest } = payload;
    
    return tool_id 
      ? this.update(tool_id, rest)
      : this.create(rest);  // 直接传递rest，无需包含tool_id
  }

  async create(payload: Omit<Tool, 'tool_id' | 'created_at'>): Promise<Tool> {
    return super.create(payload as Omit<Tool, 'id' | 'created_at'>);
  }

  // 重写删除方法，使用 tool_id 字段
  async deleteTool(toolId: string): Promise<void> {
    const { error } = await supabase
      .from(this.tableName)
      .delete()
      .eq('tool_id', toolId);

    if (error) throw new Error(error.message || '删除失败');
  }
}

// 导出单例实例
export const toolService = new ToolService();

